/*******************************************************************************
 * Copyright (c) 2010 liw.
 * All rights reserved. 
 * 
 * This file is part of VanBus.
 * 
 *     VanBus is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     VanBus is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with VanBus.  If not, see <http://www.gnu.org/licenses/>.
 * Contributors:
 *     liw - initial API and implementation
 ******************************************************************************/
package org.niclab.vanbus.query.ws;

import java.io.IOException;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpRequestBase;
import org.niclab.vanbus.application.VanBusApplication;
import org.niclab.vanbus.query.AsyncQueryTask;
import org.niclab.vanbus.query.IQuery;
import org.niclab.vanbus.query.IQuery.QueryType;
import org.niclab.vanbus.query.handler.AbstractQueryHandler;
import org.niclab.vanbus.query.handler.IProgressAware;
import org.niclab.vanbus.query.handler.IQueryHandler;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;

public class SimpleWSQueryHandler extends AbstractQueryHandler implements IProgressAware{

	private static String LOG_TAG="SimpleWSQueryHandler";
	
	protected ResponseHandler resHandler;
	protected AsyncQueryTask task;
	
	public SimpleWSQueryHandler(IQuery query, ResponseHandler resHandler) {
		super(query);
		this.resHandler=resHandler;
	}

	public HttpClient getHttpClient(){
		
		return VanBusApplication.getInstance().getHttpClient();
			
		
	}
	
	@Override
	public boolean isSupported() {
		return getQueryStrategy().support(QueryType.WS_QUERY)&& getQuery().supportQueryType(QueryType.WS_QUERY);
	}

	

	@Override
	public void query(){
		Log.d(LOG_TAG,"start to query the web service");
		
		if(!query.isQueryFinished()){

			onPreQuery();		
			Object result=null;
			try {
				result = this.getHttpClient().execute(query.generateHttpRequest(),resHandler);
			} catch (ClientProtocolException e) {
				// TODO Auto-generated catch block
				Log.e(LOG_TAG, query.generateHttpRequest().toString()+" Exception: "+e.toString());
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				Log.e(LOG_TAG, query.generateHttpRequest().getURI().toString()+" Exception: "+e.toString());
				e.printStackTrace();
			}

			query.setQueryResult(result);
			onPostQuery();
		}

		if(this.nextQueryHandler!=null)
			nextQueryHandler.query();
		
		
	}


	@Override
	public void setAsyncQueryTask(AsyncQueryTask task) {
		this.task =  task;
		
		if(resHandler instanceof IProgressAware){
			((IProgressAware) resHandler).setAsyncQueryTask(task);
		}
		
	}

	
	
	

}
